"""
任务四：迁移诊断可解释性分析配置文件

配置可解释性分析的各种参数和设置
"""

# 数据配置
DATA_CONFIG = {
    'source_csv_path': '../task1/task1_fixed_features_20250921_153924.csv',
    'model_weights_path': '../task3/best_dann_model.pth',
    'feature_columns': [
        'mean', 'std', 'max', 'min', 'peak_to_peak', 'rms', 'skewness', 'kurtosis',
        'crest_factor', 'shape_factor', 'impulse_factor', 'clearance_factor',
        'freq_mean', 'freq_std', 'freq_max', 'freq_centroid',
        'band_1_energy', 'band_2_energy', 'band_3_energy',
        'wavelet_0_energy', 'wavelet_0_std', 'wavelet_1_energy', 'wavelet_1_std',
        'wavelet_2_energy', 'wavelet_2_std', 'wavelet_3_energy', 'wavelet_3_std',
        'wavelet_4_energy', 'wavelet_4_std', 'stft_mean', 'stft_std',
        'bpfo_harmonic_1_energy', 'bpfo_harmonic_2_energy', 'bpfo_harmonic_3_energy',
        'bpfi_harmonic_1_energy', 'bpfi_harmonic_2_energy', 'bpfi_harmonic_3_energy',
        'bsf_harmonic_1_energy', 'bsf_harmonic_2_energy', 'bsf_harmonic_3_energy',
        'ftf_harmonic_1_energy', 'ftf_harmonic_2_energy', 'ftf_harmonic_3_energy',
        'approx_entropy', 'sample_entropy', 'permutation_entropy'
    ],
    'exclude_columns': [
        'fault_type', 'file_name', 'data_type', 'fault_size', 
        'load_condition', 'sampling_rate', 'rpm'
    ]
}

# 模型配置
MODEL_CONFIG = {
    'input_dim': 46,
    'num_classes': 4,
    'feature_dims': [128, 64],
    'device': 'cpu'
}

# 可解释性分析配置
INTERPRETABILITY_CONFIG = {
    'feature_importance': {
        'top_n': 20,
        'random_forest_estimators': 100
    },
    'domain_adaptation': {
        'tsne_perplexity': 30,
        'tsne_components': 2
    },
    'fault_analysis': {
        'fault_types': {
            0: '正常',
            1: '滚动体故障', 
            2: '内圈故障',
            3: '外圈故障'
        }
    },
    'visualization': {
        'figure_size': (16, 12),
        'dpi': 300,
        'colors': ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd']
    }
}

# 轴承故障机理配置
BEARING_FAULT_MECHANISM = {
    'fault_types': {
        'normal': {
            'name': '正常',
            'description': '轴承正常运行状态，无故障',
            'characteristics': ['低幅值振动', '平稳运行', '无异常频率成分']
        },
        'ball': {
            'name': '滚动体故障',
            'description': '滚动体表面存在缺陷或损伤',
            'characteristics': ['周期性冲击', 'BSF频率成分', '高频振动']
        },
        'inner_race': {
            'name': '内圈故障',
            'description': '内圈滚道表面存在缺陷或损伤',
            'characteristics': ['BPFI频率成分', '周期性冲击', '中频振动']
        },
        'outer_race': {
            'name': '外圈故障',
            'description': '外圈滚道表面存在缺陷或损伤',
            'characteristics': ['BPFO频率成分', '周期性冲击', '低频振动']
        }
    },
    'feature_categories': {
        'time_domain': {
            'features': ['mean', 'std', 'max', 'min', 'peak_to_peak', 'rms', 'skewness', 'kurtosis'],
            'description': '时域特征，反映振动信号的基本统计特性'
        },
        'frequency_domain': {
            'features': ['freq_mean', 'freq_std', 'freq_max', 'freq_centroid', 'band_1_energy', 'band_2_energy', 'band_3_energy'],
            'description': '频域特征，反映信号的频率成分和能量分布'
        },
        'time_frequency_domain': {
            'features': ['wavelet_0_energy', 'wavelet_0_std', 'wavelet_1_energy', 'wavelet_1_std', 'wavelet_2_energy', 'wavelet_2_std', 'wavelet_3_energy', 'wavelet_3_std', 'wavelet_4_energy', 'wavelet_4_std', 'stft_mean', 'stft_std'],
            'description': '时频域特征，反映信号的时变特性和频率成分的时间演化'
        },
        'fault_frequency': {
            'features': ['bpfo_harmonic_1_energy', 'bpfo_harmonic_2_energy', 'bpfo_harmonic_3_energy', 'bpfi_harmonic_1_energy', 'bpfi_harmonic_2_energy', 'bpfi_harmonic_3_energy', 'bsf_harmonic_1_energy', 'bsf_harmonic_2_energy', 'bsf_harmonic_3_energy', 'ftf_harmonic_1_energy', 'ftf_harmonic_2_energy', 'ftf_harmonic_3_energy'],
            'description': '故障频率特征，反映轴承故障的典型频率成分'
        },
        'nonlinear': {
            'features': ['approx_entropy', 'sample_entropy', 'permutation_entropy'],
            'description': '非线性特征，反映系统的复杂性和非线性特性'
        }
    }
}

# 可解释性分析方法配置
ANALYSIS_METHODS = {
    'pre_hoc': {
        'feature_importance': True,
        'model_structure': True,
        'fault_mechanism': True
    },
    'migration_process': {
        'domain_adaptation': True,
        'feature_alignment': True,
        'gradient_reversal': True
    },
    'post_hoc': {
        'gradient_importance': True,
        'decision_boundary': True,
        'layer_activations': True
    }
}

# 输出配置
OUTPUT_CONFIG = {
    'save_plots': True,
    'save_reports': True,
    'save_data': True,
    'output_dir': './',
    'timestamp_format': '%Y%m%d_%H%M%S'
}

